最近常看到一些IT幫友提出 MVC 架構的問題,筆者剛好接觸過 Laravel、Django、ASP.NET MVC 三種架構,將研讀心得整理如下,希望對初學者有些幫助。
MVC架構主要是提供系統開發者一個物件導向(OOP)、模組化的架構,將程式清楚切割,分離商業邏輯、路由、資料庫定義/存取、網頁內容,通常是放到不同的檔案,大多是以單一類別呈現,這樣,後續承接者要為維護就簡單多了:
MVC是 Model、View、Controller 的縮寫,也就意謂它是上述三部分組成的,請參考架構圖,個別的職責如下:
可以在Model類別中定義函數來操作Model,例如新增、修改、刪除、查詢,這樣,controller 呼叫時會更方便;更進一步,可以定義 View Model,資料來源來自多個資料表,並定義複雜的商業邏輯在其中。
另外,很重要的一點,我們通常會用 Foreign Key 關聯資料表,在Model中,會以類別中的屬性來串連,這樣,我們操作多各表的新增、修改、刪除、查詢,就會變得非常簡單,很多人都會忽略Foreign Key的重要性,在資料庫中都省略這方面的定義,致使ORM功能只發揮了一半。
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
{{ $name }} 就代表 Controller 傳來的 $name 變數值。
ASP.NET MVC 則以 Model.name 表示。
另外,View 通常會提供 for 迴圈來呈現陣列的內容,例如 ASP.NET MVC:
<ul>
@foreach (var item in Model.Foos)
{
<li>@item.Bar</li>
}
</ul>
另外,View 也會提供頁面繼承或母版網頁的功能,以方便每個網頁共用選單及標題,不須每一頁都重覆定義選單及標題。
如果要程式設計師每一個頁面都要從頭分別撰寫View及Controller,每一個資料表都要同時在資料庫定義一遍,並在程式中定義一個類別,那反彈一定很大,所以每個MVC架構都會提供工具自動產生框架(Scaffold),即標準的格式,你只要其中填入實質的內容即可,這樣不僅省事,也減少打字錯誤(Typo),Laravel、Django提供指令式的介面(Command Line Interface, CLI),ASP.NET MVC 則以選單的方式導引程式設計師。
MVC的架構開發方式已是目前的主流,千萬不要再用直球對決,這裡只簡單介紹MVC一般概念,希望對初學者有一絲絲的幫助。
清楚明瞭
如果只講「觀念」的話,小小建議
1.接 Request 的是 View 而非 Controller
2.Model 就是 Model,不需要「DB」
謝謝建議.